// Copyright (c) 2019 IoTeX Foundation
// This is an alpha (internal) release and is not suitable for production. This source code is provided 'as is' and no
// warranties are given as to title or non-infringement, merchantability or fitness for purpose and, to the extent
// permitted by law, all liability for your use of the code is disclaimed. This source code is governed by Apache
// License 2.0 that can be found in the LICENSE file.

package blockchain

import (
	"encoding/hex"
	"math/big"
	"time"

	"github.com/pkg/errors"

	"github.com/iotexproject/go-pkgs/hash"
	"github.com/iotexproject/iotex-address/address"
)

const (
	// FpRegistryID is the ID of FpRegistry
	FpRegistryID = "0000000000000009"
	// FpRegistryBinary is the binary code of FpRegistry
	FpRegistryBinary = "6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36110ee806100cf6000396000f3006080604052600436106100e6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063163f6691146100eb5780635f141a0f146101995780636ca0607214610202578063715018a614610293578063719d0d30146102aa57806371b6d6ea146103585780637338c25c146103bd5780638278337a146104265780638da5cb5b146104735780638f32d59b146104ca578063b9019437146104f9578063c2ab66dd14610582578063def81479146105f9578063e23c50631461062c578063f2fde38b14610691578063fdac9ff7146106d4575b600080fd5b3480156100f757600080fd5b5061013a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919050505061072f565b6040518085815260200184600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390f35b3480156101a557600080fd5b506101e86004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610845565b604051808215151515815260200191505060405180910390f35b34801561020e57600080fd5b50610251600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610941565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561029f57600080fd5b506102a86109c7565b005b3480156102b657600080fd5b506102f9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610a99565b6040518085815260200184600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390f35b34801561036457600080fd5b506103a7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610af6565b6040518082815260200191505060405180910390f35b3480156103c957600080fd5b5061040c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610b5c565b604051808215151515815260200191505060405180910390f35b34801561043257600080fd5b506104556004803603810190808035600019169060200190929190505050610bc5565b60405180826000191660001916815260200191505060405180910390f35b34801561047f57600080fd5b50610488610c7a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104d657600080fd5b506104df610ca3565b604051808215151515815260200191505060405180910390f35b34801561050557600080fd5b50610568600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610cfa565b604051808215151515815260200191505060405180910390f35b34801561058e57600080fd5b506105df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291908035600019169060200190929190505050610d21565b604051808215151515815260200191505060405180910390f35b34801561060557600080fd5b5061060e610d49565b60405180826000191660001916815260200191505060405180910390f35b34801561063857600080fd5b5061067b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610d6d565b6040518082815260200191505060405180910390f35b34801561069d57600080fd5b506106d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dd3565b005b3480156106e057600080fd5b5061072d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190929190505050610df2565b005b60008060008061073d611080565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000876000191660001916815260200190815260200160002060806040519081016040529081600082015481526020016001820154600019166000191681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815250509050806000015181602001518260400151836060015194509450945094505092959194509250565b600061084f610c7a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610939575061093882847f63616e5772697465322d00000000000000000000000000000000000000000000186040516020018082600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b60208310151561090657805182526020820191506020810190506020830392506108e1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020610b5c565b5b905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b6109cf610ca3565b15156109da57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6001602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905084565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060030154905092915050565b600080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008460001916600019168152602001908152602001600020600001541415905092915050565b6000817f63616e5772697465322d00000000000000000000000000000000000000000000186040516020018082600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b602083101515610c465780518252602082019150602081019050602083039250610c21565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6000610d068483610b5c565b8015610d185750610d178383610b5c565b5b90509392505050565b6000610d2d8484610b5c565b8015610d405750610d3e8483610b5c565b155b90509392505050565b7f63616e5772697465322d0000000000000000000000000000000000000000000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060000154905092915050565b610ddb610ca3565b1515610de657600080fd5b610def81610f86565b50565b610dfc8233610845565b1515610e0757600080fd5b608060405190810160405280828152602001600080191681526020013373ffffffffffffffffffffffffffffffffffffffff16815260200142815250600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008460001916600019168152602001908152602001600020600082015181600001556020820151816001019060001916905560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301559050503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f7f467fc85b3c9db1144a5f705bcb37dcd17e760ed57b1921186f50b51000c3a184846040518083600019166000191681526020018281526020016020019250505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610fc257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6080604051908101604052806000815260200160008019168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250905600a165627a7a723058206ee451e56048b12a43334336b0d8fb115e967b73e6482449ba1d270305dd92b00029"
	// CdpManageID is the ID of CdpManage
	CdpManageID = "0000000000000010"
	// CdpManageBinary is the binary code of CdpManage
	CdpManageBinary = "608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a333600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a333600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612c4e806101db6000396000f300608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631e9a6950146101385780632aed7f3f146101855780632e05d56f146101c85780634b0bddd21461021f57806350aaf8b81461026e578063521eb273146102b157806360e5d2551461030857806362884e1b1461035f57806370a08231146103a2578063715018a6146103f95780637706656714610410578063778140ea146104675780638da5cb5b146104be5780638f32d59b146105155780639fb9c12c14610544578063aba08b5514610591578063b2b884a4146105fe578063b552420614610655578063deaa59df14610698578063e674d917146106db578063eed5cf9d1461071e578063f2fde38b14610795578063f970f96d146107d8575b600080fd5b34801561014457600080fd5b50610183600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610845565b005b34801561019157600080fd5b506101c6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d91565b005b3480156101d457600080fd5b50610209600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eca565b6040518082815260200191505060405180910390f35b34801561022b57600080fd5b5061026c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610edc565b005b34801561027a57600080fd5b506102af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fb3565b005b3480156102bd57600080fd5b506102c6611073565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561031457600080fd5b5061031d611099565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561036b57600080fd5b506103a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110bf565b005b3480156103ae57600080fd5b506103e3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112b9565b6040518082815260200191505060405180910390f35b34801561040557600080fd5b5061040e611398565b005b34801561041c57600080fd5b506104256114d5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561047357600080fd5b5061047c6114fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ca57600080fd5b506104d3611521565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052157600080fd5b5061052a61154b565b604051808215151515815260200191505060405180910390f35b34801561055057600080fd5b5061058f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115a3565b005b34801561059d57600080fd5b506105fc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611652565b005b34801561060a57600080fd5b5061063f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061179d565b6040518082815260200191505060405180910390f35b34801561066157600080fd5b50610696600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117b5565b005b3480156106a457600080fd5b506106d9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611875565b005b3480156106e757600080fd5b5061071c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611935565b005b34801561072a57600080fd5b5061077f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119f5565b6040518082815260200191505060405180910390f35b3480156107a157600080fd5b506107d6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a1a565b005b3480156107e457600080fd5b50610843600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aa2565b005b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317a38cf0846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561090457600080fd5b505af1158015610918573d6000803e3d6000fd5b505050506040513d602081101561092e57600080fd5b810190808051906020019092919050505015156109b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7468697320746f6b656e20756e61626c652072656465656d206e6f770000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d387f07d846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610a7057600080fd5b505af1158015610a84573d6000803e3d6000fd5b505050506040513d6020811015610a9a57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610b78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f7468697320746f6b656e2063616e27742066696e6420616e7920726f6f74546f81526020017f6b656e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd33600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610c7157600080fd5b505af1158015610c85573d6000803e3d6000fd5b505050506040513d6020811015610c9b57600080fd5b8101908080519060200190929190505050508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610d5057600080fd5b505af1158015610d64573d6000803e3d6000fd5b505050506040513d6020811015610d7a57600080fd5b810190808051906020019092919050505050505050565b610d9961154b565b1515610e0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663f2fde38b610e31611521565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610eaf57600080fd5b505af1158015610ec3573d6000803e3d6000fd5b5050505050565b6000610ed582611d9a565b9050919050565b610ee461154b565b1515610f58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610fbb61154b565b151561102f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006110cb8233611e34565b90506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600081141561115d576112b5565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561127857600080fd5b505af115801561128c573d6000803e3d6000fd5b505050506040513d60208110156112a257600080fd5b8101908080519060200190929190505050505b5050565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561135657600080fd5b505af115801561136a573d6000803e3d6000fd5b505050506040513d602081101561138057600080fd5b81019080805190602001909291905050509050919050565b6113a061154b565b1515611414576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6115ab61154b565b806115ff5750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b151561160a57600080fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d73672e73656e6465722069736e27742070726f787920636f6e74726163740081525060200191505060405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b60086020528060005260406000206000915090505481565b6117bd61154b565b1515611831576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61187d61154b565b15156118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61193d61154b565b15156119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6007602052816000526040600020602052806000526040600020600091509150505481565b611a2261154b565b1515611a96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b611a9f81612a9d565b50565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d73672e73656e6465722069736e27742070726f787920636f6e74726163740081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d387f07d846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611c3b57600080fd5b505af1158015611c4f573d6000803e3d6000fd5b505050506040513d6020811015611c6557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611d95578273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d5857600080fd5b505af1158015611d6c573d6000803e3d6000fd5b505050506040513d6020811015611d8257600080fd5b8101908080519060200190929190505050505b505050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415611e2b57600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b80915050919050565b6000806000806000806000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d387f07d8e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611f0257600080fd5b505af1158015611f16573d6000803e3d6000fd5b505050506040513d6020811015611f2c57600080fd5b81019080805190602001909291905050509950600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151515611fe4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f7468697320746f6b656e2069736e27742064656665727265642061737365742e81525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317a38cf08b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156120a157600080fd5b505af11580156120b5573d6000803e3d6000fd5b505050506040513d60208110156120cb57600080fd5b81019080805190602001909291905050501515612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f726f6f7420746f6b656e2063616e27742072656465656d206e6f77000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317a38cf08e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561220d57600080fd5b505af1158015612221573d6000803e3d6000fd5b505050506040513d602081101561223757600080fd5b810190808051906020019092919050505015156122bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7468697320746f6b656e2063616e27742072656465656d206e6f77000000000081525060200191505060405180910390fd5b600760008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205498506000891115156123d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f7468697320746f6b656e20696e7465726573742068617320657874726163746581526020017f640000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d8720e08e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561249657600080fd5b505af11580156124aa573d6000803e3d6000fd5b505050506040513d60208110156124c057600080fd5b81019080805190602001909291905050509750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638174bc658b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561259057600080fd5b505af11580156125a4573d6000803e3d6000fd5b505050506040513d60208110156125ba57600080fd5b8101908080519060200190929190505050965060008714151515612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f726f6f7420746f6b656e20646f65736e2774207365742070617944617465000081525060200191505060405180910390fd5b8787116126535787612655565b865b9750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0f812b08e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561271457600080fd5b505af1158015612728573d6000803e3d6000fd5b505050506040513d602081101561273e57600080fd5b810190808051906020019092919050505095508973ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614151561289257600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a339d34a876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561284357600080fd5b505af1158015612857573d6000803e3d6000fd5b505050506040513d602081101561286d57600080fd5b8101908080519060200190929190505050945087851161288d578761288f565b845b97505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a339d34a8e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561294f57600080fd5b505af1158015612963573d6000803e3d6000fd5b505050506040513d602081101561297957600080fd5b81019080805190602001909291905050509350878411151561299e5760009a50612a8d565b6129c6620151806129b88a87612b9990919063ffffffff16565b612bba90919063ffffffff16565b92506129d18d611d9a565b9150600082111515612a4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f63616e27742066696e6420616e7920696e74657265737400000000000000000081525060200191505060405180910390fd5b612a876402540be400612a798b612a6b8787612be490919063ffffffff16565b612be490919063ffffffff16565b612bba90919063ffffffff16565b9050809a505b5050505050505050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612ad957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080838311151515612bab57600080fd5b82840390508091505092915050565b600080600083111515612bcc57600080fd5b8284811515612bd757fe5b0490508091505092915050565b6000806000841415612bf95760009150612c1b565b8284029050828482811515612c0a57fe5b04141515612c1757600080fd5b8091505b50929150505600a165627a7a7230582054a7386d8df90754116a3fdb6a5125138b66590bdcba52670e743857d2b317740029"
	// ManageID is the ID of Manage
	ManageID = "0000000000000011"
	// ManageBinary is the binary code of Manage
	ManageBinary = "6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a333600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3615af98061018d6000396000f300608060405260043610610149576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063083b6b8a1461014e5780630987df0314610191578063121d8fdd1461021e5780632a7292d0146102515780632aed7f3f146102a85780632f745c59146102eb57806339a7c3d91461037857806342320732146103e55780634f6ccce71461041057806368c195d41461047d5780636b6af2d514610566578063715018a6146105d35780638da5cb5b146105ea5780638f32d59b146106415780639183bfde146106705780639db49153146106dd578063a22cb46514610708578063a91ee0dc14610757578063ba81d85a1461079a578063e4dc2aa4146107f1578063e985e9c514610848578063eb222d67146108c3578063f0bc1c2b146108f6578063f2fde38b14610939578063fc91a8971461097c575b600080fd5b34801561015a57600080fd5b5061018f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109d7565b005b34801561019d57600080fd5b5061021c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a97565b005b34801561022a57600080fd5b50610233610bbf565b60405180826000191660001916815260200191505060405180910390f35b34801561025d57600080fd5b506102a660048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610be3565b005b3480156102b457600080fd5b506102e9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c0a565b005b3480156102f757600080fd5b50610336600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d43565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038457600080fd5b506103e3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e14565b005b3480156103f157600080fd5b506103fa610f3a565b6040518082815260200191505060405180910390f35b34801561041c57600080fd5b5061043b60048036038101908080359060200190929190505050610f44565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561048957600080fd5b50610564600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610f9c565b005b34801561057257600080fd5b5061059160048036038101908080359060200190929190505050611293565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105df57600080fd5b506105e86112d0565b005b3480156105f657600080fd5b506105ff61140d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064d57600080fd5b50610656611437565b604051808215151515815260200191505060405180910390f35b34801561067c57600080fd5b506106db600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061148f565b005b3480156106e957600080fd5b506106f26115b5565b6040518082815260200191505060405180910390f35b34801561071457600080fd5b50610755600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506115c2565b005b34801561076357600080fd5b50610798600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116fe565b005b3480156107a657600080fd5b506107db600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117be565b6040518082815260200191505060405180910390f35b3480156107fd57600080fd5b50610832600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061180a565b6040518082815260200191505060405180910390f35b34801561085457600080fd5b506108a9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611853565b604051808215151515815260200191505060405180910390f35b3480156108cf57600080fd5b506108d861191d565b60405180826000191660001916815260200191505060405180910390f35b34801561090257600080fd5b50610937600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611941565b005b34801561094557600080fd5b5061097a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a01565b005b34801561098857600080fd5b506109bd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a89565b604051808215151515815260200191505060405180910390f35b6109df611437565b1515610a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610b395750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515610bad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f6f6e5472616e73666572207361666520636865636b206661696c65640000000081525060200191505060405180910390fd5b610bb984848484611adf565b50505050565b7f63616e4275726e0000000000000000000000000000000000000000000000000081565b6000610bf0848484611c2f565b610bf984611293565b9050610c0481612276565b50505050565b610c12611437565b1515610c86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663f2fde38b610caa61140d565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610d2857600080fd5b505af1158015610d3c573d6000803e3d6000fd5b5050505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905082101515610d9557600080fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515610de157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610eb65750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515610f2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6f6e4d696e74207361666520636865636b206661696c6564000000000000000081525060200191505060405180910390fd5b610f35838383612328565b505050565b6000600a54905090565b6000610f4e6115b5565b82101515610f5b57600080fd5b600c82815481101515610f6a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000808251845114151561103e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f496e636f6e73697374656e74206172726179206c656e6774682062657477656581526020017f6e2061726773000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c696420726563697069656e7400000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061112357506111228633611853565b5b151561112e57600080fd5b83519150600090505b8181101561128b57838181518110151561114d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff166323b872dd8787868581518110151561118257fe5b906020019060200201516040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561124457600080fd5b505af1158015611258573d6000803e3d6000fd5b505050506040513d602081101561126e57600080fd5b810190808051906020019092919050505050806001019050611137565b505050505050565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6112d8611437565b151561134c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156115315750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15156115a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6f6e4275726e207361666520636865636b206661696c6564000000000000000081525060200191505060405180910390fd5b6115b08383836123f2565b505050565b6000600c80549050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156115fd57600080fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611706611437565b151561177a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60003073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806119155750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b7f6f6e52656365697665640000000000000000000000000000000000000000000081565b611949611437565b15156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a09611437565b1515611a7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b611a86816124bc565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611aeb848484846125b8565b611b3d81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269190919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611bd281600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b290919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c1f82856126d3565b611c2983856129b7565b50505050565b600080611c3a611437565b1515611cae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166003600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54686520746f6b656e496420686173206265656e20757365642e00000000000081525060200191505060405180910390fd5b30611d8e612fbf565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015611de0573d6000803e3d6000fd5b509150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611e88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e6577207269736b455243323078206661696c65642e0000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663083b6b8a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611f4557600080fd5b505af1158015611f59573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663f0bc1c2b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561201a57600080fd5b505af115801561202e573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663a91ee0dc600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156120ef57600080fd5b505af1158015612103573d6000803e3d6000fd5b505050508190506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806003600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff166340c10f1985856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561225757600080fd5b505af115801561226b573d6000803e3d6000fd5b505050505050505050565b600c80549050600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c8190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612333838383612e77565b61238581600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b290919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123dd81600a546126b290919063ffffffff16565b600a819055506123ed82846126d3565b505050565b6123fd838383612f1b565b61244f81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269190919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124a781600a5461269190919063ffffffff16565b600a819055506124b782846129b7565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156124f857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f2ec42c768b3caf0ba159df445d8ada8f640f9fd6e197ca0fee2ad6ead9c1fb0984848484604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390a150505050565b6000808383111515156126a357600080fd5b82840390508091505092915050565b60008082840190508381101515156126c957600080fd5b8091505092915050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011801561284257508073ffffffffffffffffffffffffffffffffffffffff16600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811015156127ff57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561284c576129b3565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b5050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015612a5857600080fd5b505af1158015612a6c573d6000803e3d6000fd5b505050506040513d6020811015612a8257600080fd5b81019080805190602001909291905050501115612a9e57612e70565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250612b736001600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061269190919063ffffffff16565b9150600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515612bc157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481101515612c3b57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515612cd157fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612d6b9190612fcf565b506000600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050505050565b7f18ce7231207dc2f2c03bdd7740e204a851e20ff0f78caef201fd048d565302af838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b7f4b33696053421bdd3effdcad46fd57bce93ed990c36bb143632cdb7654d75b91838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b604051612aad8061302183390190565b815481835581811115612ff657818360005260206000209182019101612ff59190612ffb565b5b505050565b61301d91905b80821115613019576000816000905550600101613001565b5090565b90560060806040526000600360006101000a81548160ff0219169083151502179055506000600360156101000a81548160ff02191690831515021790555034801561004657600080fd5b50604051602080612aad8339810180604052810190808051906020019092919050505080600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129f3806100ba6000396000f3006080604052600436106100db576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063083b6b8a146100e0578063095ea7b31461012357806318160ddd1461018857806323b872dd146101b3578063242654a214610238578063313ce56714610267578063395093511461029257806340c10f19146102f757806342966c681461034457806370a0823114610371578063a457c2d7146103c8578063a9059cbb1461042d578063a91ee0dc14610492578063dd62ed3e146104d5578063f0bc1c2b1461054c575b600080fd5b3480156100ec57600080fd5b50610121600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061058f565b005b34801561012f57600080fd5b5061016e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610698565b604051808215151515815260200191505060405180910390f35b34801561019457600080fd5b5061019d6107c5565b6040518082815260200191505060405180910390f35b3480156101bf57600080fd5b5061021e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107cf565b604051808215151515815260200191505060405180910390f35b34801561024457600080fd5b5061024d6109e2565b604051808215151515815260200191505060405180910390f35b34801561027357600080fd5b5061027c6109f9565b6040518082815260200191505060405180910390f35b34801561029e57600080fd5b506102dd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a02565b604051808215151515815260200191505060405180910390f35b34801561030357600080fd5b50610342600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c39565b005b34801561035057600080fd5b5061036f60048036038101908080359060200190929190505050610dac565b005b34801561037d57600080fd5b506103b2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f55565b6040518082815260200191505060405180910390f35b3480156103d457600080fd5b50610413600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f9d565b604051808215151515815260200191505060405180910390f35b34801561043957600080fd5b50610478600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111d4565b604051808215151515815260200191505060405180910390f35b34801561049e57600080fd5b506104d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111eb565b005b3480156104e157600080fd5b50610536600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112f4565b6040518082815260200191505060405180910390f35b34801561055857600080fd5b5061058d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611462565b005b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610654576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5f6d676e7420636865636b206572726f7200000000000000000000000000000081525060200191505060405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156106d557600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600254905090565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109335750600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c585336040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156108f757600080fd5b505af115801561090b573d6000803e3d6000fd5b505050506040513d602081101561092157600080fd5b81019080805190602001909291905050505b1561094c5761094384848461156b565b600190506109db565b8161095785336112f4565b101515156109cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4e6f7420656e6f75676820616c6c6f77616e63652076616c756500000000000081525060200191505060405180910390fd5b6109d88484846118e1565b90505b9392505050565b6000600360159054906101000a900460ff16905090565b60006064905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610a3f57600080fd5b610ace82600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a9390919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5f6d676e7420636865636b206572726f7200000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900460ff16151515610d83576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e63654d696e7420636865636b206572726f7200000000000000000000000081525060200191505060405180910390fd5b6001600360006101000a81548160ff021916908315150217905550610da88282611ab4565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637338c25c337f63616e4275726e000000000000000000000000000000000000000000000000006040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826000191660001916815260200192505050602060405180830381600087803b158015610e9957600080fd5b505af1158015610ead573d6000803e3d6000fd5b505050506040513d6020811015610ec357600080fd5b81019080805190602001909291905050501515610f48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6d73672e73656e6465722063616e2774206275726e000000000000000000000081525060200191505060405180910390fd5b610f523382611bd3565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610fda57600080fd5b61106982600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cf290919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60006111e133848461156b565b6001905092915050565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5f6d676e7420636865636b206572726f7200000000000000000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c584846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156113e757600080fd5b505af11580156113fb573d6000803e3d6000fd5b505050506040513d602081101561141157600080fd5b81019080805190602001909291905050501561144f577f8000000000000000000000000000000000000000000000000000000000000000905061145c565b6114598383611d13565b90505b92915050565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5f6d676e7420636865636b206572726f7200000000000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611573611d9a565b600360159054906101000a900460ff16806116b057508273ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364fd522a306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561165d57600080fd5b505af1158015611671573d6000803e3d6000fd5b505050506040513d602081101561168757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b8061170857508173ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b151561177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7269736b207472616e7366657220636865636b206661696c656400000000000081525060200191505060405180910390fd5b61178783838361212f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637338c25c837f6f6e5265636569766564000000000000000000000000000000000000000000006040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826000191660001916815260200192505050602060405180830381600087803b15801561187457600080fd5b505af1158015611888573d6000803e3d6000fd5b505050506040513d602081101561189e57600080fd5b8101908080519060200190929190505050156118dc576118d08383836020604051908101604052806000815250612284565b15156118db57600080fd5b5b505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561196e57600080fd5b6119fd82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cf290919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a8884848461156b565b600190509392505050565b6000808284019050838110151515611aaa57600080fd5b8091505092915050565b611abe82826124d2565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166339a7c3d93084846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611bb757600080fd5b505af1158015611bcb573d6000803e3d6000fd5b505050505050565b611bdd8282612610565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639183bfde3084846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611cd657600080fd5b505af1158015611cea573d6000803e3d6000fd5b505050505050565b600080838311151515611d0457600080fd5b82840390508091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000600360159054906101000a900460ff1615611db95761212a565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638fa80547306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611e7657600080fd5b505af1158015611e8a573d6000803e3d6000fd5b505050506040513d6020811015611ea057600080fd5b810190808051906020019092919050505092506000831415611edc576001600360156101000a81548160ff02191690831515021790555061212a565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ab48cce306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611f9957600080fd5b505af1158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050509150600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7888aec30846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156120c757600080fd5b505af11580156120db573d6000803e3d6000fd5b505050506040513d60208110156120f157600080fd5b810190808051906020019092919050505090508281101515612129576001600360156101000a81548160ff0219169083151502179055505b5b505050565b61213a83838361279b565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630987df03308585856040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561226757600080fd5b505af115801561227b573d6000803e3d6000fd5b50505050505050565b60006122a58473ffffffffffffffffffffffffffffffffffffffff166129b4565b15156122b457600190506124ca565b7f43460000000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663c5072d0b33883088886040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561241c578082015181840152602081019050612401565b50505050905090810190601f1680156124495780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561246c57600080fd5b505af1158015612480573d6000803e3d6000fd5b505050506040513d602081101561249657600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161490505b949350505050565b60008273ffffffffffffffffffffffffffffffffffffffff16141515156124f857600080fd5b61250d81600254611a9390919063ffffffff16565b600281905550612564816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a9390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff161415151561263657600080fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115151561268357600080fd5b61269881600254611cf290919063ffffffff16565b6002819055506126ef816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cf290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111515156127e857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561282457600080fd5b612875816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cf290919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612908816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a9390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600080823b9050600081119150509190505600a165627a7a723058208efb55e190dd0d42e4a30dd1da482d7205acd5514996bfc469c8456fab0348470029a165627a7a72305820d5d88e4adb8a34cd018b2bfef08db22bb1d8a50cb18c2ecda5e7fbac03779ca20029"
	// ManageProxyID is the ID of ManageProxy
	ManageProxyID = "0000000000000012"
	// ManageProxyBinary is the binary code of ManageProxy
	ManageProxyBinary = "6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a333600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36121768061018d6000396000f3006080604052600436106100d0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632aed7f3f146100d557806350aaf8b8146101185780635582e7701461015b57806360e5d255146101f0578063715018a61461024757806377eeafd11461025e5780638da5cb5b146102b55780638f32d59b1461030c578063b74b15a61461033b578063bb038e1514610388578063c254f696146103df578063d4a22bde14610422578063f2fde38b14610465578063f5f8644e146104a8575b600080fd5b3480156100e157600080fd5b50610116600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610533565b005b34801561012457600080fd5b50610159600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061066c565b005b34801561016757600080fd5b506101ee60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061072c565b005b3480156101fc57600080fd5b506102056107ca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025357600080fd5b5061025c6107f0565b005b34801561026a57600080fd5b5061027361092d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102c157600080fd5b506102ca610953565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561031857600080fd5b5061032161097d565b604051808215151515815260200191505060405180910390f35b34801561034757600080fd5b50610386600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109d5565b005b34801561039457600080fd5b5061039d610b32565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103eb57600080fd5b50610420600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b58565b005b34801561042e57600080fd5b50610463600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c18565b005b34801561047157600080fd5b506104a6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cd8565b005b3480156104b457600080fd5b50610531600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610d60565b005b61053b61097d565b15156105af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663f2fde38b6105d3610953565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561065157600080fd5b505af1158015610665573d6000803e3d6000fd5b5050505050565b61067461097d565b15156106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61073461097d565b15156107a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b6107b38787866119e2565b6107c1878787868686611acc565b50505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6107f861097d565b151561086c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6109dd61097d565b1515610a51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b74b15a683836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b6061097d565b1515610bd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c2061097d565b1515610c94576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ce061097d565b1515610d54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b610d5d8161204e565b50565b6000806000610d6d61097d565b1515610de1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a339d34a896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610e9e57600080fd5b505af1158015610eb2573d6000803e3d6000fd5b505050506040513d6020811015610ec857600080fd5b81019080805190602001909291905050508410151515610f50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6578706972794461746520746f6f206561726c6965720000000000000000000081525060200191505060405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166323b872dd8a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561104957600080fd5b505af115801561105d573d6000803e3d6000fd5b505050506040513d602081101561107357600080fd5b810190808051906020019092919050505050611090868a896119e2565b61128d86600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364fd522a8b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561115157600080fd5b505af1158015611165573d6000803e3d6000fd5b505050506040513d602081101561117b57600080fd5b8101908080519060200190929190505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ab48cce8c6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561124957600080fd5b505af115801561125d573d6000803e3d6000fd5b505050506040513d602081101561127357600080fd5b810190808051906020019092919050505060008989611acc565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b6af2d5876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561131e57600080fd5b505af1158015611332573d6000803e3d6000fd5b505050506040513d602081101561134857600080fd5b81019080805190602001909291905050509250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d387f07d896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561141857600080fd5b505af115801561142c573d6000803e3d6000fd5b505050506040513d602081101561144257600080fd5b81019080805190602001909291905050509150879050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515611492578190505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca09a4d784836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561158357600080fd5b505af1158015611597573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635902476e848a6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f970f96d89858a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561179d57600080fd5b505af11580156117b1573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aba08b5533858a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156118ae57600080fd5b505af11580156118c2573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aba08b558a858a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156119bf57600080fd5b505af11580156119d3573d6000803e3d6000fd5b50505050505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632a7292d08484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611aaf57600080fd5b505af1158015611ac3573d6000803e3d6000fd5b50505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b6af2d5886040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015611b5f57600080fd5b505af1158015611b73573d6000803e3d6000fd5b505050506040513d6020811015611b8957600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d905fbb82846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611c6157600080fd5b505af1158015611c75573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c24fffa82856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611d3e57600080fd5b505af1158015611d52573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663435dafc782866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611e1b57600080fd5b505af1158015611e2f573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aab859ba82876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015611f2457600080fd5b505af1158015611f38573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c6095a4d82886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561202d57600080fd5b505af1158015612041573d6000803e3d6000fd5b5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561208a57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820873668fa4696bb11a696ed1ab9980cd2ec5e9ac3d6d77d360b6866edbcff50c30029"
	// EapStorageID is the ID of EapStorage
	EapStorageID = "0000000000000013"
	// EapStorageBinary is the binary code of EapStorage
	EapStorageBinary = "6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a333600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361215a8061018d6000396000f300608060405260043610610154576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630ff2d2121461015957806317a38cf0146102155780631c24fffa146102705780632aed7f3f146102bd5780632d905fbb146103005780633037c5ad1461034d578063435dafc7146103d65780634b0bddd2146104235780635902476e146104725780635b927403146104d557806364fd522a14610524578063715018a6146105a75780637ab48cce146105be5780638174bc65146106415780638da5cb5b146106985780638f32d59b146106ef5780638fa805471461071e5780639d8720e014610775578063a339d34a146107cc578063aab859ba14610823578063b74b15a614610886578063c6095a4d146108d3578063ca09a4d714610936578063d0f812b014610999578063d387f07d14610a1c578063f2fde38b14610a9f575b600080fd5b34801561016557600080fd5b5061019a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ae2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101da5780820151818401526020810190506101bf565b50505050905090810190601f1680156102075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022157600080fd5b50610256600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bfc565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102bb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c8b565b005b3480156102c957600080fd5b506102fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d73565b005b34801561030c57600080fd5b5061034b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eac565b005b34801561035957600080fd5b506103d4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610f94565b005b3480156103e257600080fd5b50610421600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061108c565b005b34801561042f57600080fd5b50610470600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611174565b005b34801561047e57600080fd5b506104d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124b565b005b3480156104e157600080fd5b50610522600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061136d565b005b34801561053057600080fd5b50610565600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611468565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105b357600080fd5b506105bc61150a565b005b3480156105ca57600080fd5b506105ff600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611647565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064d57600080fd5b50610682600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116e9565b6040518082815260200191505060405180910390f35b3480156106a457600080fd5b506106ad61176b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106fb57600080fd5b50610704611795565b604051808215151515815260200191505060405180910390f35b34801561072a57600080fd5b5061075f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117ed565b6040518082815260200191505060405180910390f35b34801561078157600080fd5b506107b6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061186f565b6040518082815260200191505060405180910390f35b3480156107d857600080fd5b5061080d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118f1565b6040518082815260200191505060405180910390f35b34801561082f57600080fd5b50610884600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611973565b005b34801561089257600080fd5b506108d1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a95565b005b3480156108df57600080fd5b50610934600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b7d565b005b34801561094257600080fd5b50610997600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c9f565b005b3480156109a557600080fd5b506109da600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dc1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a2857600080fd5b50610a5d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e63565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aab57600080fd5b50610ae0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f05565b005b6060600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f616464726573735f6e616d650000000000000000000000000000000000000000600019166000191681526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bf05780601f10610bc557610100808354040283529160200191610bf0565b820191906000526020600020905b815481529060010190602001808311610bd357829003601f168201915b50505050509050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f72656465656d5f656e61626c65000000000000000000000000000000000000006000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b610c93611795565b80610ce75750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515610cf257600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f6d696e745f64617465000000000000000000000000000000000000000000000060001916600019168152602001908152602001600020819055505050565b610d7b611795565b1515610def576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663f2fde38b610e1361176b565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b5050505050565b610eb4611795565b80610f085750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515610f1357600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f6578706972795f6461746500000000000000000000000000000000000000000060001916600019168152602001908152602001600020819055505050565b610f9c611795565b80610ff05750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515610ffb57600080fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f616464726573735f6e616d650000000000000000000000000000000000000000600019166000191681526020019081526020016000209080519060200190611087929190612089565b505050565b611094611795565b806110e85750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15156110f357600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f7269736b5f71747900000000000000000000000000000000000000000000000060001916600019168152602001908152602001600020819055505050565b61117c611795565b15156111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611253611795565b806112a75750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15156112b257600080fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f706172656e745f746f6b656e00000000000000000000000000000000000000006000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611375611795565b806113c95750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15156113d457600080fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f72656465656d5f656e61626c65000000000000000000000000000000000000006000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f646562746f7200000000000000000000000000000000000000000000000000006000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611512611795565b1515611586576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f6372656469746f720000000000000000000000000000000000000000000000006000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f7061795f6461746500000000000000000000000000000000000000000000000060001916600019168152602001908152602001600020549050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f7269736b5f71747900000000000000000000000000000000000000000000000060001916600019168152602001908152602001600020549050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f6d696e745f64617465000000000000000000000000000000000000000000000060001916600019168152602001908152602001600020549050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f6578706972795f6461746500000000000000000000000000000000000000000060001916600019168152602001908152602001600020549050919050565b61197b611795565b806119cf5750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15156119da57600080fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f6372656469746f720000000000000000000000000000000000000000000000006000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611a9d611795565b80611af15750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515611afc57600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f7061795f6461746500000000000000000000000000000000000000000000000060001916600019168152602001908152602001600020819055505050565b611b85611795565b80611bd95750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515611be457600080fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f646562746f7200000000000000000000000000000000000000000000000000006000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611ca7611795565b80611cfb5750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515611d0657600080fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f726f6f745f746f6b656e000000000000000000000000000000000000000000006000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f706172656e745f746f6b656e00000000000000000000000000000000000000006000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f726f6f745f746f6b656e000000000000000000000000000000000000000000006000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611f0d611795565b1515611f81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f69734f776e657220636865636b206661696c656400000000000000000000000081525060200191505060405180910390fd5b611f8a81611f8d565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611fc957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120ca57805160ff19168380011785556120f8565b828001600101855582156120f8579182015b828111156120f75782518255916020019190600101906120dc565b5b5090506121059190612109565b5090565b61212b91905b8082111561212757600081600090555060010161210f565b5090565b905600a165627a7a72305820b5b0ee16c76ce73ca2a3cdc05c78dfd1ebd2debe48d02e678aa1a19b6a7bd6bc0029"
	// TokenRiskLockID is the ID of TokenRiskLock
	TokenRiskLockID = "0000000000000014"
	// TokenRiskLockBinary is the binary code of TokenRiskLock
	TokenRiskLockBinary = "6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3610e43806100cf6000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063191655871461009e57806350aaf8b8146100e157806360e5d25514610124578063715018a61461017b5780638da5cb5b146101925780638f32d59b146101e9578063c5072d0b14610218578063f2fde38b1461033d578063f7888aec14610380575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103f7565b005b3480156100ed57600080fd5b50610122600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610747565b005b34801561013057600080fd5b5061013961078b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018757600080fd5b506101906107b1565b005b34801561019e57600080fd5b506101a7610883565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f557600080fd5b506101fe6108ac565b604051808215151515815260200191505060405180910390f35b34801561022457600080fd5b506102e9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610903565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b34801561034957600080fd5b5061037e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c56565b005b34801561038c57600080fd5b506103e1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c75565b6040518082815260200191505060405180910390f35b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317a38cf0846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156104b757600080fd5b505af11580156104cb573d6000803e3d6000fd5b505050506040513d60208110156104e157600080fd5b810190808051906020019092919050505015156104fd57600080fd5b8291508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561059b57600080fd5b505af11580156105af573d6000803e3d6000fd5b505050506040513d60208110156105c557600080fd5b81019080805190602001909291905050509050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811015151561066357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561070657600080fd5b505af115801561071a573d6000803e3d6000fd5b505050506040513d602081101561073057600080fd5b810190808051906020019092919050505050505050565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6107b96108ac565b15156107c457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f6d73672e73656e64657220213d205f746f6b656e2e616464726573730000000081525060200191505060405180910390fd5b828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610a4457600080fd5b505af1158015610a58573d6000803e3d6000fd5b505050506040513d6020811015610a6e57600080fd5b810190808051906020019092919050505010151515610b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f62616c616e63654f662076616c7565206973206d696e207468616e207468697381526020017f2e76616c7565000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610baa83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cfc90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f4346000000000000000000000000000000000000000000000000000000000000905095945050505050565b610c5e6108ac565b1515610c6957600080fd5b610c7281610d1d565b50565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000808284019050838110151515610d1357600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610d5957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820183b08b7d93bbe9635bc77b059683b744952e92abd6abec1e40b10823a7cc26f0029"
	// StartFpTokenID is the ID of StartFpToken
	StartFpTokenID = "00000000000000015"
)

type (
	// FpToken is an interface for an fp token
	FpToken interface {
		Contract
		CreateToken(string, string, string, int64, int64, int64, int64) (string, error)
		CreateDeferredToken(string, string, string, string, int64, int64, int64) (string, error)
		TokenAddress(string) (string, error)
		Transfer(string, string, string, string, int64) (string, error)
		RiskLock(string, string, string, int64) (string, error)
		SetRate(string, int64) (string, error)
		GetRate(string) (string, error)
		SetPayDate(string, int64) (string, error)
		GetPayDate(string) (string, error)

		SetManagement(string) FpToken
		SetManagementProxy(string) FpToken
		SetEapStorage(string) FpToken
		SetRiskLock(string) FpToken
		SetRegistry(string) FpToken
		SetCdpManager(string) FpToken
		SetStableToken(string) FpToken
	}

	fpToken struct {
		Contract
		manage      string // address of Management
		manageProxy string // address of ManagementProxy
		eapStorage  string // address of EapStorage
		riskLock    string // address of TokenRiskLock
		registry    string // address of Registry
		cdp         string // address of CdpManager
		stbToken    string // address of stable token
	}
)

// NewFpToken creates a new FpToken
func NewFpToken(exp string) FpToken {
	return &fpToken{Contract: NewContract(exp)}
}

func (f *fpToken) CreateToken(id, debtor, creditor string, total, risk, open, exp int64) (string, error) {
	addrDebtor, err := address.FromString(debtor)
	if err != nil {
		return "", errors.Errorf("invalid debtor address = %s", debtor)
	}
	addrCreditor, err := address.FromString(creditor)
	if err != nil {
		return "", errors.Errorf("invalid creditor address = %s", creditor)
	}

	h, err := f.RunAsOwner().
		SetAddress(f.manageProxy).
		Call("5582e770",
			[]byte(id),
			addrDebtor.Bytes(),
			addrCreditor.Bytes(),
			big.NewInt(total).Bytes(),
			big.NewInt(risk).Bytes(),
			big.NewInt(open).Bytes(),
			big.NewInt(exp).Bytes())
	if err != nil {
		return h, errors.Wrapf(err, "call failed to create fp token %s", id)
	}

	if _, err := f.CheckCallResult(h); err != nil {
		return h, errors.Wrapf(err, "check failed to create fp token %s", id)
	}
	return h, nil
}

func (f *fpToken) CreateDeferredToken(creditor, prvkey, source, deferred string, amount, open, exp int64) (string, error) {
	addrCreditor, err := address.FromString(creditor)
	if err != nil {
		return "", errors.Errorf("invalid creditor address = %s", creditor)
	}
	srcToken, err := address.FromString(source)
	if err != nil {
		return "", errors.Errorf("invalid token address = %s", source)
	}
	addrProxy, _ := address.FromString(f.manageProxy)

	h, err := f.SetExecutor(creditor).
		SetPrvKey(prvkey).
		SetAddress(f.manage).
		Call("a22cb465", addrProxy.Bytes(), []byte{1})
	if err != nil {
		return h, errors.Wrap(err, "creditor failed to set approve")
	}
	time.Sleep(time.Millisecond * 200)

	h, err = f.RunAsOwner().
		SetAddress(f.manageProxy).
		Call("f5f8644e",
			addrCreditor.Bytes(),
			srcToken.Bytes(),
			big.NewInt(amount).Bytes(),
			[]byte(deferred),
			big.NewInt(open).Bytes(),
			big.NewInt(exp).Bytes())
	if err != nil {
		return h, errors.Wrapf(err, "call failed to create deferred token %s", deferred)
	}

	if _, err := f.CheckCallResult(h); err != nil {
		return h, errors.Wrapf(err, "check failed to create deferred token %s", deferred)
	}
	return h, nil
}

func (f *fpToken) TokenAddress(astid string) (string, error) {
	// call Management.tokenById() to get the asset's ERC20 token address
	res, err := f.RunAsOwner().SetAddress(f.manage).Read("6b6af2d5", []byte(astid))
	if err != nil {
		return "", errors.Wrapf(err, "failed to get token address for asset %s", astid)
	}
	data, err := hex.DecodeString(res)
	if err != nil {
		return "", errors.Wrap(err, "invalid token address")
	}
	addr := hash.BytesToHash160(data)
	if (hash.Hash160{} == addr) {
		// tokenById() returns an all-zero address, sth must go wrong
		return "", errors.Errorf("all-zero token address")
	}
	// tokenById() returns 20-byte EVM address, convert to iotex address
	token, _ := address.FromBytes(addr[:])
	return token.String(), nil
}

func (f *fpToken) Transfer(token, sender, prvkey, receiver string, amount int64) (string, error) {
	_, err := address.FromString(sender)
	if err != nil {
		return "", errors.Errorf("invalid account address = %s", sender)
	}
	addrReceiver, err := address.FromString(receiver)
	if err != nil {
		return "", errors.Errorf("invalid account address = %s", receiver)
	}
	// transfer to receiver
	h, err := f.SetAddress(token).
		SetExecutor(sender).
		SetPrvKey(prvkey).
		Call("a9059cbb", addrReceiver.Bytes(), big.NewInt(amount).Bytes())
	if err != nil {
		return h, errors.Wrap(err, "call transfer failed")
	}

	if _, err := f.CheckCallResult(h); err != nil {
		return h, errors.Wrap(err, "check transfer failed")
	}
	return h, nil
}

func (f *fpToken) RiskLock(token, sender, prvkey string, amount int64) (string, error) {
	// lock is a special type of transfer with receiver == risk lock contract
	return f.Transfer(token, sender, prvkey, f.riskLock, amount)
}

func (f *fpToken) SetRate(source string, amount int64) (string, error) {
	tokenAddr := []byte{}
	if source != StableTokenID {
		token, err := address.FromString(source)
		if err != nil {
			return "", errors.Errorf("invalid token address = %s", source)
		}
		tokenAddr = token.Bytes()
	}
	h, err := f.RunAsOwner().
		SetAddress(f.cdp).
		Call("9fb9c12c", tokenAddr, big.NewInt(amount).Bytes())
	if err != nil {
		return h, errors.Wrap(err, "call set interest rate failed")
	}

	if _, err := f.CheckCallResult(h); err != nil {
		return h, errors.Wrap(err, "check set interest rate failed")
	}
	return h, nil
}

func (f *fpToken) GetRate(token string) (string, error) {
	return f.ReadAndParseToDecimal(f.cdp, "2e05d56f", token)
}

func (f *fpToken) SetPayDate(token string, pay int64) (string, error) {
	tokenAddr, err := address.FromString(token)
	if err != nil {
		return "", errors.Errorf("invalid token address = %s", token)
	}
	h, err := f.RunAsOwner().
		SetAddress(f.eapStorage).
		Call("b74b15a6", tokenAddr.Bytes(), big.NewInt(pay).Bytes())
	if err != nil {
		return h, errors.Wrap(err, "call setPayDate failed")
	}

	if _, err := f.CheckCallResult(h); err != nil {
		return h, errors.Wrap(err, "check setPayDate failed")
	}
	return h, nil
}

func (f *fpToken) GetPayDate(token string) (string, error) {
	return f.ReadAndParseToDecimal(f.eapStorage, "8174bc65", token)
}

func (f *fpToken) Start() error {
	addrManage, err := address.FromString(f.manage)
	if err != nil {
		return errors.Errorf("invalid management contract address = %s", f.manage)
	}
	addrProxy, err := address.FromString(f.manageProxy)
	if err != nil {
		return errors.Errorf("invalid management proxy contract address = %s", f.manageProxy)
	}
	addrEap, err := address.FromString(f.eapStorage)
	if err != nil {
		return errors.Errorf("invalid storage contract address = %s", f.eapStorage)
	}
	addrRiskLock, err := address.FromString(f.riskLock)
	if err != nil {
		return errors.Errorf("invalid risk lock contract address = %s", f.riskLock)
	}
	addrReg, err := address.FromString(f.registry)
	if err != nil {
		return errors.Errorf("invalid registry contract address = %s", f.registry)
	}
	addrCdp, err := address.FromString(f.cdp)
	if err != nil {
		return errors.Errorf("invalid cdp management contract address = %s", f.cdp)
	}
	admin, err := address.FromString(Producer)
	if err != nil {
		return errors.Errorf("invalid admin address = %s", Producer)
	}

	// set-up management
	h, err := f.RunAsOwner().SetAddress(f.manage).Call("f0bc1c2b", addrEap.Bytes())
	if err != nil {
		return errors.Wrap(err, "management contract failed to set storage")
	}
	time.Sleep(time.Millisecond * 100)

	h1, err := f.Call("083b6b8a", addrRiskLock.Bytes())
	if err != nil {
		return errors.Wrap(err, "management contract failed to set risk lock")
	}
	time.Sleep(time.Millisecond * 100)

	h2, err := f.Call("a91ee0dc", addrReg.Bytes())
	if err != nil {
		return errors.Wrap(err, "management contract failed to set registry")
	}
	time.Sleep(time.Millisecond * 100)

	h3, err := f.Call("f2fde38b", addrProxy.Bytes())
	if err != nil {
		return errors.Wrap(err, "management contract failed to transfer ownership")
	}
	time.Sleep(time.Millisecond * 100)

	res, err := f.Read("121d8fdd", nil)
	if err != nil {
		return errors.Wrap(err, "management contract failed to get CAN_BURN()")
	}
	canBurn, err := hex.DecodeString(res)
	if err != nil {
		return errors.Wrapf(err, "invalid CAN_BURN bytes")
	}
	if len(canBurn) != 32 {
		return errors.Errorf("invalid CAN_BURN bytes length = %d, expecting 32", len(canBurn))
	}
	res, err = f.Read("eb222d67", nil)
	if err != nil {
		return errors.Wrap(err, "management contract failed to get ON_RECEIVED()")
	}
	onReceived, err := hex.DecodeString(res)
	if err != nil {
		return errors.Wrapf(err, "invalid ON_RECEIVED bytes")
	}
	if len(onReceived) != 32 {
		return errors.Errorf("invalid ON_RECEIVED bytes length = %d, expecting 32", len(onReceived))
	}

	// set-up risk lock
	h4, err := f.SetAddress(f.riskLock).Call("50aaf8b8", addrEap.Bytes())
	if err != nil {
		return errors.Wrap(err, "risk lock contract failed to set storage")
	}
	time.Sleep(time.Millisecond * 100)

	// set-up storage
	h5, err := f.SetAddress(f.eapStorage).Call("4b0bddd2", addrProxy.Bytes(), []byte{1})
	if err != nil {
		return errors.Wrap(err, "storage contract failed to set admin")
	}
	time.Sleep(time.Millisecond * 100)

	// set-up proxy
	h6, err := f.SetAddress(f.manageProxy).Call("50aaf8b8", addrEap.Bytes())
	if err != nil {
		return errors.Wrap(err, "proxy contract failed to set storage")
	}
	time.Sleep(time.Millisecond * 100)

	h7, err := f.Call("d4a22bde", addrManage.Bytes())
	if err != nil {
		return errors.Wrap(err, "proxy contract failed to set management")
	}
	time.Sleep(time.Millisecond * 100)

	h8, err := f.Call("c254f696", addrCdp.Bytes())
	if err != nil {
		return errors.Wrap(err, "proxy contract failed to set cdp management")
	}
	time.Sleep(time.Millisecond * 100)

	// set up registry
	h9, err := f.SetAddress(f.registry).Call("fdac9ff7", admin.Bytes(), canBurn, []byte{1})
	if err != nil {
		return errors.Wrap(err, "registry failed to set CAN_BURN")
	}
	time.Sleep(time.Millisecond * 100)

	h10, err := f.Call("fdac9ff7", addrRiskLock.Bytes(), onReceived, []byte{1})
	if err != nil {
		return errors.Wrap(err, "registry failed to set ON_RECEIVED")
	}
	time.Sleep(time.Millisecond * 100)

	// set-up cdp management
	h11, err := f.SetAddress(f.cdp).Call("50aaf8b8", addrEap.Bytes())
	if err != nil {
		return errors.Wrap(err, "cdp management contract failed to set storage")
	}
	time.Sleep(time.Millisecond * 100)

	h12, err := f.Call("b5524206", addrProxy.Bytes())
	if err != nil {
		return errors.Wrap(err, "cdp management contract failed to set proxy")
	}
	time.Sleep(time.Millisecond * 100)

	h13, err := f.Call("deaa59df", admin.Bytes())
	if err != nil {
		return errors.Wrap(err, "cdp management contract failed to set wallet")
	}
	time.Sleep(time.Millisecond * 100)

	// set-up stable token approve
	approve := hash.Hash256{}
	for i := 0; i < len(approve); i++ {
		approve[i] = 255
	}
	h14, err := f.SetAddress(f.stbToken).Call("095ea7b3", addrCdp.Bytes(), approve[:])
	if err != nil {
		return errors.Wrap(err, "call stable token contract failed to set approve")
	}

	if _, err := f.CheckCallResult(h); err != nil {
		return errors.Wrap(err, "check management contract failed to set storage")
	}
	if _, err := f.CheckCallResult(h1); err != nil {
		return errors.Wrap(err, "check management contract failed to set risk lock")
	}
	if _, err := f.CheckCallResult(h2); err != nil {
		return errors.Wrap(err, "check management contract failed to set registry")
	}
	if _, err := f.CheckCallResult(h3); err != nil {
		return errors.Wrap(err, "check management contract failed to transfer ownership")
	}
	if _, err := f.CheckCallResult(h4); err != nil {
		return errors.Wrap(err, "check risk lock contract failed to set storage")
	}
	if _, err := f.CheckCallResult(h5); err != nil {
		return errors.Wrap(err, "storage contract failed to set admin")
	}
	if _, err := f.CheckCallResult(h6); err != nil {
		return errors.Wrap(err, "check proxy contract failed to set storage")
	}
	if _, err := f.CheckCallResult(h7); err != nil {
		return errors.Wrap(err, "check proxy contract failed to set management")
	}
	if _, err := f.CheckCallResult(h8); err != nil {
		return errors.Wrap(err, "check proxy contract failed to set cdp management")
	}
	if _, err := f.CheckCallResult(h9); err != nil {
		return errors.Wrap(err, "check registry contract failed to set CAN_BURN")
	}
	if _, err := f.CheckCallResult(h10); err != nil {
		return errors.Wrap(err, "check registry contract failed to set ON_RECEIVED1")
	}
	if _, err := f.CheckCallResult(h11); err != nil {
		return errors.Wrap(err, "check cdp management contract failed to set storage")
	}
	if _, err := f.CheckCallResult(h12); err != nil {
		return errors.Wrap(err, "check cdp management contract failed to set proxy")
	}
	if _, err := f.CheckCallResult(h13); err != nil {
		return errors.Wrap(err, "check cdp management contract failed to set wallet")
	}
	if _, err := f.CheckCallResult(h14); err != nil {
		return errors.Wrap(err, "check stable token contract failed to set approve")
	}
	return nil
}

func (f *fpToken) SetManagement(manage string) FpToken {
	f.manage = manage
	return f
}

func (f *fpToken) SetManagementProxy(proxy string) FpToken {
	f.manageProxy = proxy
	return f
}

func (f *fpToken) SetEapStorage(eap string) FpToken {
	f.eapStorage = eap
	return f
}

func (f *fpToken) SetRiskLock(lock string) FpToken {
	f.riskLock = lock
	return f
}

func (f *fpToken) SetRegistry(reg string) FpToken {
	f.registry = reg
	return f
}

func (f *fpToken) SetCdpManager(cdp string) FpToken {
	f.cdp = cdp
	return f
}

func (f *fpToken) SetStableToken(stb string) FpToken {
	f.stbToken = stb
	return f
}
